package com.tony.jdbc.dynamic.service;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import java.util.function.Consumer;
import java.util.function.Function;

/**
 * @author tony
 * @desc jdbc动态数据源操作功能接口
 * @date 2025/10/27 12:51
 */
public interface IDynamicService {
    /**
     * 执行JdbcTemplate
     *
     * @param datasourceName 数据源名称
     * @param consumer       执行方法
     */
    void executeJdbc(String datasourceName, Consumer<JdbcTemplate> consumer);

    /**
     * 执行JdbcTemplate
     *
     * @param datasourceName 数据源名称
     * @param function       执行方法
     * @return 执行结果
     */
    <T> T executeJdbcWithResult(String datasourceName, Function<JdbcTemplate, T> function);

    /**
     * 执行NamedParameterJdbcTemplate
     *
     * @param datasourceName 数据源名称
     * @param consumer       执行方法
     */
    void executeParamJdbc(String datasourceName, Consumer<NamedParameterJdbcTemplate> consumer);

    /**
     * 执行NamedParameterJdbcTemplate
     *
     * @param datasourceName 数据源名称
     * @param function       执行方法
     * @return 执行结果
     */
    <T> T executeParamJdbcWithResult(String datasourceName, Function<NamedParameterJdbcTemplate, T> function);

    /**
     * 执行JdbcTemplate
     *
     * @param datasourceName 数据源名称
     * @param function       执行方法
     * @return 执行结果
     */
    int updateJdbc(String datasourceName, Function<JdbcTemplate, Integer> function);

    /**
     * 执行NamedParameterJdbcTemplate
     *
     * @param datasourceName 数据源名称
     * @param function       执行方法
     * @return 执行结果
     */
    int updateParamJdbc(String datasourceName, Function<NamedParameterJdbcTemplate, Integer> function);
}
